package com.example.animal;

import java.time.LocalDate;
import java.time.Period;

/**
 * 动物抽象类，所有动物的基类，包含所有动物共有的属性和方法
 */
public abstract class Animal {
    // 基本属性
    protected String name;          // 动物名称
    protected String speciesName;   // 物种名称
    protected LocalDate birthDate;  // 出生日期
    protected String color;         // 颜色
    protected double weight;        // 体重（千克）
    protected Gender gender;        // 性别
    protected TemperatureRegulation temperatureType; // 体温类型
    
    /**
     * 构造函数
     * @param name 动物名称
     * @param speciesName 物种名称
     * @param birthDate 出生日期
     * @param color 颜色
     * @param weight 体重
     * @param gender 性别
     * @param temperatureType 体温类型
     */
    public Animal(String name, String speciesName, LocalDate birthDate, 
                 String color, double weight, Gender gender, TemperatureRegulation temperatureType) {
        this.name = name;
        this.speciesName = speciesName;
        this.birthDate = birthDate;
        this.color = color;
        this.weight = weight;
        this.gender = gender;
        this.temperatureType = temperatureType;
    }

    /**
     * 抽象方法：呼吸行为
     */
    public abstract void breathe();
    
    /**
     * 抽象方法：进食行为
     */
    public abstract void eat();
    
    /**
     * 获取年龄
     * @return 年龄（年）
     */
    public int getAge() {
        return Period.between(birthDate, LocalDate.now()).getYears();
    }
}
